package com.yowasa.xiuxian.engine.message.cmd;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.google.common.collect.Lists;
import com.yowasa.xiuxian.annoations.CMD;
//import com.yowasa.xiuxian.controller.TransactionTaskController;
import com.yowasa.xiuxian.engine.message.BaseMessageHandler;
import com.yowasa.xiuxian.engine.message.CmdMessageHandler;
import com.yowasa.xiuxian.entity.enums.CmdScopeEnum;
import com.yowasa.xiuxian.entity.mys.MysComponent;
import com.yowasa.xiuxian.entity.mys.SendMessage;
import com.yowasa.xiuxian.service.helper.MessageHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@CMD(name = "/帮助", scope = CmdScopeEnum.ALL)
public class HelpHandler extends CmdMessageHandler {
    public static final Logger logger = LoggerFactory.getLogger(HelpHandler.class);
    @Autowired
    private MessageHelper messageHelper;
    @Autowired
    private List<BaseMessageHandler> messageHandlers;

    @Override
    public void execute(SendMessage message) {
        List<String> params = getAllParam(message);//获取名称
        List<String> list = Lists.newArrayList("面板","装备","奇遇","怪物","地图","新手教程","每日任务");
        if (StringUtils.isEmpty(params.get(0))) {
            String collect = list.stream().collect(Collectors.joining(","));
            List<MysComponent> componentList = new ArrayList<MysComponent>();
            MysComponent component = new MysComponent("1",2, "新手教程","/帮助 新手教程");
            MysComponent componentA = new MysComponent("2",2, "帮助","/帮助 /帮助");
            componentList.add(component);
            componentList.add(componentA);
            List<List<MysComponent>> smallList = new ArrayList<>();
            smallList.add(componentList);

            messageHelper.replyMysPanel(message, "可以在后面追加"+collect+"\n或要查看效果的指令名称来获取帮助\n例如：\n@机器人/帮助 新手教程\n@机器人/帮助 /开始修仙",smallList,null,null);
            return;
        }

        String cmdName = params.get(0);
        logger.info("cmdName:{}",cmdName);
        boolean flag = true;
        for (BaseMessageHandler messageHandler : messageHandlers) {
            if(messageHandler.match(cmdName)){
                messageHelper.replyMys(message,messageHandler.desc());
                flag = false;
                break;
            }
//            CMD annotation = messageHandler.getClass().getAnnotation(CMD.class);
//            if(annotation != null){
//                logger.info("annotation:{}",annotation.name());
//            }
//
//            if(annotation != null && cmdName.equals(annotation.name())) {
//                logger.info("获取到执行类！！！输出帮助");
//                messageHelper.replyMys(message,messageHandler.desc());
//                flag = false;
//                break;
//            }

        }



        if(flag){
            int i = list.indexOf(cmdName) + 1;
            StringBuffer sb = new StringBuffer();
            switch (i){
                //面板","装备","奇遇","怪物","副本","新手教程"
                case 1:
                    sb.append("个人信息面板分为三块，灵根，基础属性，战斗面板\n")
                            .append("灵根：\n每个人都有五灵根，但灵根的纯度不同，只有达到一定阈值才会激活显示在面板上\n")
                            .append("面板上的灵根顺序以灵根的纯度进行排序，灵根纯度影响修炼效率\n")
                            .append("基础属性：\n体质 会影响物抗，血量，免疫\n")
                            .append("力量 会影响物理攻击力\n气感 会影响法攻，法抗，法力值，修炼速度\n")
                            .append("敏捷 会影响速度，物攻，物抗\n仙缘 影响游历的收益，奇遇概率，锻造品质等随机结果\n")
                            .append("悟性 会影响历练值的获取，参悟秘籍的速度，悟性低于30可学习无属性心法太玄经\n")
                            .append("战斗面板：\n均为字面意思，速度会影响赶路时间，战斗模式为速度影响行动条的形式，并非回合制");
                    break;
                case 2:
                    sb.append("装备可以携带四件，每个位置对应不同的属性加成\n物攻  剑\n法攻  法\n血量  花\n蓝量  杯\n物抗  头\n法抗  沙\n速度  羽\n")
                            .append("目前开放了三种等级的装备，均可通过锻造获取\n")
                            .append("一二级装备图纸每天会在交易行随机刷新\n")
                            .append("二级装备还需要蒙德的boss材料与副本材料进行锻造\n")
                            .append("三级装备图纸会在璃月奇遇游商有概率刷新，同时游商会售卖三级装备所需的特殊材料原胚\n\n")
                            .append("装备存在不同的品质，从低到高依次为：\n")
                            .append("劣质 良品 优等 极品 绝妙 神话\n不同品质的同一件装备带来的属性加成也不同，仙缘越高，越可能锻造出高品质装备\n")
                            .append("部分装备存在独有的技能，装备技能不计入战技上限，但需要先配满战技再装备才能突破上限");
                    break;
                case 3:
                    sb.append("奇遇就是游历时触发的特殊情况，目前有两种主要的奇遇\n1.提升灵根纯度的珠子。2.获得战技秘籍\n")
                            .append("提纯灵根的物品使用后会增加一点纯度，同时减少克制属性灵根一点纯度，达到15点之后可激活灵根\n")
                            .append("珠子在璃月刷新，秘籍在两座主城与四个村镇刷新\n")
                            .append("珠子被取走后需要触发九星连珠奇遇才能再次获取，秘籍被取走后需要游戏内10年才能再次获取\n")
                            .append("特殊奇遇：\n清泉镇，悟性低于30可触发，境界低于始明之青，获取太玄经\n")
                            .append("蒙德城，系统将在拍卖行上架西风秘典，学习可随机获取一个神通\n")
                            .append("璃月全境，游商，出售高品质的物品");
                    break;
                case 4:
                    //怪物
                    sb.append("怪物分为普通魔物和boss，怪物的面板和玩家面板的生成逻辑相同，因此相同的怪物重复碰见可能强度不同，当玩家境界超过怪物3级之后，击杀怪物将不再掉落材料\n")
                            .append("蒙德boss境界为如曜之金\n苍风高地：安德留斯\t风龙废墟：特瓦林\n")
                            .append("璃月boss境界为深邃之星\n归离原：若陀龙王\t渌华池:奥赛尔\nboss血量约为同境界玩家的十倍左右\n")
                            .append("当boss刷新后，当前别野在此处的游历都会前往讨伐boss，当boss被击杀后，参与讨伐伤害前三的玩家可参与结算分配，发现者和最后一击会多分一份\n")
                            .append("可以通过 /查看效果 怪物名称 查看怪物的技能组，boss掉落，怪物出没点等信息");
                    break;
                case 5:
                    //"副本","地图","新手教程
                    sb.append("指令 /前往 可以查看当前可以去到的地点\n")
                            .append("地名（建议前往境界）")
                            .append("一级区域：\n风起地(始明之青)   苍风高低(了彻之白)\n")
                            .append("二级区域: \n风龙废墟(如耀之金)  千风神殿(流幻之铂)\n")
                            .append("三级区域：\n荻花洲(流幻之铂)   归离原(璀璨之钻)\n")
                            .append("四级区域：\n渌华池(璀璨之钻)   遁玉陵(深邃之星)");
                    break;
                case 6:
                    sb.append("新玩家需要先使用指令 /开始修仙 创建账号\n然后使用 /个人信息 查看自己的面板\n")
                            .append("如果基础属性太低，或灵根不是自己想要的，可以使用 /注销 进行重开\n")
                            .append("注销有30分钟的cd哦，时间到了之后再使用指令 /开始修仙 重新创建账号\n")
                            .append("这里并不建议一直重开刷非常高的面板，因为游戏内存在许多提升属性或重随面板的丹药等物品\n")
                            .append("并且刷出多条高数值属性的概率非常低\n最重要的属性是仙缘，这代表着你在游戏里这一生的运气\n")
                            .append("\n账号创建完毕之后，就到了学习心法的时候，五种灵根都有自己对应的心法，无需获取，直接学习即可\n")
                            .append("水火为法修，前期伤害高，但是身板脆\n木修生命力强，活着的人才有资格输出\n土修重防御，和木修一样都是后期发力的职业\n")
                            .append("金修主物理伤害，身边略脆，速度很快，不论前期还是后期都有舒服的地方，但是并非顶尖\n各位玩家可以自行选择想要的方向\n\n")
                            .append("游戏中的一天为现实中的12秒\n前期建议先闭关，但是记得要结束修炼哦，不要闭死关老死家中啦。\n")
                            .append("游历建议在村子刷刷历练就好，也可以去风起地刷刷低级丘丘人\n等境界足够，历练值够了就可以学习战技了，学完战技再去野外游历就会舒服很多\n")
                            .append("这样前期就差不多渡过啦，可以自由地在提瓦特玩耍了。");
                    break;
                case 7:
                    sb.append("每日任务需要去冒险家协会，使用指令 /冒险家协会 接取 可以获取今天的任务\n")
                            .append("如果当日没做完，任务进度会顺延到第二天\n")
                            .append("可以使用 /冒险家协会 进度 指令，来查看当前任务的进度\n")
                            .append("与NPC的交互，使用 /地图 交互 NPC名称\n")
                            .append("不带NPC名称，可以查看当地所有存在的NPC哦，没有任务的时候也是可以与NPC对话的\n")
                            .append("目前任务还比较少，主要是没时间做QAQ\n")
                            .append("有关于任务的建议，可以给开发者留言哦~\n")
                            .append("每日任务是获得原石与树脂的重要来源\n原石可以用于抽卡获取装备，树脂用于挑战副本获取材料\n")
                            .append("前期想获得原石只能做做每日啦，后期可以去试着挑战深境螺旋来获得原石哦~\n");
                    break;
                default:
                    sb.append("没有找到这样的帮助关键词呢\n");
                    sb.append("如果有什么bug反馈，或者玩法建议等等，都可以前往别野 《汐颜的大别野》 找开发者反馈哦\n");
                    sb.append("Fly you 2 the 别野，邀请你加入【汐颜的大别野】，复制口令打开米游社或在大别野搜索【miEXYmB】一起聊天吧¥#¥XodzOJKNIwJMLMONONJ¥#¥");
                    break;
            }

            messageHelper.replyMys(message,sb.toString());
        }


    }


    public String desc(){
        return new StringBuffer().append("用于获取游玩帮助，和查看指令效果的指令\n")
                .toString();

    }
}
